Homebrew 是个好工具,除了用它安装命令行软件外,我也会用它来安装 GUI 软件。这么做的好处是 Homebrew 会直接帮我接连链接到 GUI 软件的可执行文件的符号链接,这样,我在终端使用符号链接,就可以打 GUI 软件了。例如,Sublime Text 的符号链接是 subl,那么在终端任何目录中,一行 subl “new text.txt” 就可以用 Sublime Text 打开new text.txt了。
问题是,brew cask install xxx 的下载速度经常会非常慢,而我把下载软件包的 URL 直接复制到 Chrome 中去下载,则非常快,这就很尴尬了。经过稍微检查,我发现brew cask install xxx 过程中,会在 Cache/Cask 目录(其实就是 brew –cache命令的结果)中生成一个类似于xxx–v1.2.3.zip.incomplete这样的文件。于是我把自己用 Chrome 下载的文件,复制到 Cache/Cask 中来,然后更名为 xxx–v1.2.3.zip,也就是把 .incomplete 去掉。然后再 brew cask install xxx一下,发现 Homebrew 提示软件包已经下载好了,于是立刻开始安装了。
上面这样的方式确实避免了下载慢的问题,不过这样手动操作,总是不那么高(yǒu)效(bī)率(gé),所以我就想要写个小脚本来自动化这个过程。我选择了使用 shell 脚本。此处要吐槽一下 shell 脚本的语法,难记,真的是很难记(比如字符串操作)!比起来,几乎任何一门编程语言的语法都要好记得多。
废话说了很多了,下面是脚本内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| #!/bin/bash
if [ "$#" -eq "1" ]; then tap_path=`brew --repo caskroom/cask` file_path="${tap_path}/Casks/${1}.rb" if [ -f "$file_path" ]; then while read key value; do if [[ $key == "version" ]]; then len=$((${#value}-2)) version=${value:1:${len}} elif [[ $key == "url" ]]; then len=$((${#value}-2)) url=${value:1:${len}} url=${url/\#\{version\}/$version} /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome $url fi done < $file_path else echo "Cask '$1' is unavailable: No Cask with this name exists." fi cache_dir=`brew --cache` downloaded_name=${url##*/} target_name=$1--${version}.${downloaded_name##*.} while true; do if [ -e ~/Downloads/$downloaded_name ]; then mv ~/Downloads/$downloaded_name $cache_dir/Cask/$target_name brew cask install $1 break else sleep 3 fi done else echo "usage: cask-install Cask-Name" fi
|